# author: axin
# date: 2021/4/21 17:18
# description:
import re

from rest_framework import serializers

from users.models import User


class UserSerialzier(serializers.ModelSerializer):
    """
        用户序列化器
    """

    class Meta:
        model = User
        fields = ('id', 'username', 'mobile', 'email')  # id默认read_only  不参与反序列化操作
        extra_kwargs = {
            'password': {
                'wirte_only': True,  # 只参与反序列化过程
                'max_length': 20,  # 最大长度20
                'mix_length': 8,  # 最小长度8
            },
            'username': {  # 因为username也参与反序列化过程，所以也可指定最大最小长度
                # 'wirte_only': True,  # 只参与反序列化过程
                'max_length': 20,  # 最大长度20
                'mix_length': 5,  # 最小长度8
            },
        }

    def validate_mobile(self,value):

        if not re.match(r'1[3-9]\d{9}',value):
            raise serializers.ValidationError('手机号格式不匹配')
        return value


    # 重写create方法完成密码加密
    def create(self, validated_data):
        # 方法一
        # user=super().create(validated_data)
        # # 密码加密的方法
        # user.set_password(validated_data['password'])
        # user.save()
        # 方法二
        user = User.objects.create_user(**validated_data)

        return user
